/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mrp.beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import mrp.entity.GestorBaseDatos;
import mrp.login.Login;
import mrp.persistencia.controller.HormaJpaController;
import mrp.persistencia.controller.TablaindiceJpaController;
import mrp.persistencia.controller.exceptions.NonexistentEntityException;
import mrp.persistencia.controller.exceptions.PreexistingEntityException;
import mrp.persistencia.controller.exceptions.RollbackFailureException;
import mrp.persistencia.entity.Tablaindice;
import mrp.web.HormaWeb;
import mrp.persistencia.entity.Horma;

/**
 *
 * @author root
 */
//@ManagedBean(name="horma")
//@SessionScoped
public class HormaBean implements Serializable{
 
//    @ManagedProperty("#{usuarioBean}")
//    private UsuarioBean usuarioBean;
//    @ManagedProperty("#{login}")
//    private Login login;
//    @ManagedProperty("#{hormaweb}")
//    private HormaWeb hormaweb;
//    
//    private Horma horma;
    
    private HormaJpaController hormaController;
    private Horma horma;

    
    
    
    //-------------------- constructor-----------------------
    public HormaBean() {
      hormaController = new HormaJpaController();
      

    }
    //-------------------- metodos getters and setters-----------------------

    public Horma getHorma() {
        return horma;
    }

    public void setHorma(Horma jpaHorma) {
        this.horma = jpaHorma;
    }

//    public void setHorma(Horma horma) {
//        this.horma = horma;
//    }
//
//    public HormaWeb getHormaweb() {
//        return hormaweb;
//    }
//
//    public void setHormaweb(HormaWeb hormaweb) {
//        this.hormaweb = hormaweb;
//    }
//
//    public Login getLogin() {
//        return login;
//    }
//
//    public void setLogin(Login login) {
//        this.login = login;
//    }
//
//    public UsuarioBean getUsuarioBean() {
//        return usuarioBean;
//    }
//
//    public void setUsuarioBean(UsuarioBean usuarioBean) {
//        this.usuarioBean = usuarioBean;
//    }

//    public String getTamanio() {
//        return this.getHorma().getTamanio();
//    }
//
//    public void setTamanio(String tamanio) {
//        this.getHorma().setTamanio(tamanio);
//    }
    
    //-----------------fin metodos getters and setters-----------------------
    
    //-----------------metodos de la clase Horma--------------------------
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
//    public void mostrarMensaje(String tipoMensaje,String mensaje, String detalle)
//    {
//        if(tipoMensaje.equals("info"))
//        {
//            FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO, mensaje,detalle) );   
//        }else{
//            if(tipoMensaje.equals("error"))
//            {
//                FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR, mensaje,detalle) );   
//            }else{
//                if(tipoMensaje.equals("fatal"))
//                {
//                    FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_FATAL, mensaje,detalle) );   
//                }else{
//                    if(tipoMensaje.equals("alerta"))
//                    {
//                        FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_WARN, mensaje,detalle) );   
//                    }
//                }
//            }
//        }
//    }
    
//    private boolean verificarLogin()
//    {
//        if(login.verificarSesionUsuario().equals(usuarioBean.getUsuario().getIdSesion()))
//        {           
//            return true;
//        }
//        else
//        {
//            this.mostrarMensaje("error","No está ingresado al sistema","");
//            this.borrarDatos();
//        }
//        return false;
//    }
//    private void setearConexion(GestorBaseDatos gbd)
//    {
//        gbd.setUsuario(usuarioBean.getUsuario().getCedulaUsuario());
//        gbd.setClave(usuarioBean.getUsuario().getClave());
//        gbd.setBasedatos("BDEgoZapateria");
//        gbd.setPuerto("5432");
//        gbd.setServidor("localhost");
//    }
    private void borrarDatos()
    {
        horma = new Horma();   
    }    
    public List<Object> ingresarHorma()
    {                
                //GestorBaseDatos gbd=new GestorBaseDatos();
                //this.setearConexion(gbd);
                
                //obtener fecha y hora del servidor
                /*List fechaList=gbd.select("SELECT TIMESTAMP WITHOUT TIME ZONE \'now\'");
                String fechaHora=(fechaList.get(0).toString());                      
                
                noExiste=(gbd.select("select codHorma from Horma where nombreHorma like \'"+this.getNombreHorma()+"\' and tamanio like \'"+this.getTamanio()+"\'")).isEmpty(); 
                
                if(noExiste)
                {
                    List <String> datosLista= new ArrayList<String>();
                    String respuestaInsert; //es la respuesta del insert si se almaceno o no los datos

                    //Generacion del primary key
                    this.setCodHorma(gbd.generaCodigo("horma", "HM"));
                    datosLista.add(0,"\'"+this.getCodHorma()+"\'");

                    datosLista.add(1,"\'"+this.getNombreHorma()+"\'");                
                    datosLista.add(2,"\'"+this.getTamanio()+"\'"); 
                    
                    datosLista.add(3,this.usuarioBean.getUsuario().getCodUsuario());

                    datosLista.add(4,"\'"+fechaHora+"\'");

                    //Almacenar datos en la tabla Vendedor
                    respuestaInsert=""+gbd.insert("Horma",datosLista,true);
               
                    if(respuestaInsert.equals("Registro almacenado correctamente"))
                    {
                            mostrarMensaje("info","Ingresado Nueva Horma!","");
                            this.borrarDatos();
                            return true;
                    }
                    else
                    {
                        mostrarMensaje("fatal","Error al almacenar los datos","");
                    }                
                }
                else
                {
                    this.mostrarMensaje("error","Error: La Horma que desea ingresar ya existe","");
                    this.borrarDatos();     
                    return true;
                }           */
        
         List listaRespuesta=new ArrayList<Object>();
         String condicion=" where o.nombrehorma= '"+this.getHorma().getNombrehorma()+"' and o.tamanio= '"+this.getHorma().getTamanio()+"'";
         if(((this.hormaController.findHormaWhere(condicion)).size())==0)
         {
            try {    
                TablaindiceJpaController tic=new TablaindiceJpaController();
                this.getHorma().setCodhorma(tic.generaCodigo("horma", "HM"));                
                this.hormaController.create(this.getHorma());
                listaRespuesta.add(true);
                listaRespuesta.add("Nueva Horma creada!");
                return listaRespuesta;
            } catch (PreexistingEntityException ex) {
                listaRespuesta.add(false);
                listaRespuesta.add("Horma que desea crear ya existe!");
                ex.printStackTrace();
                Logger.getLogger(HormaBean.class.getName()).log(Level.SEVERE, null, ex);
            } catch (RollbackFailureException ex) {
                listaRespuesta.add(false);
                listaRespuesta.add("Error al crear Nueva Horma!");
                ex.printStackTrace();
                Logger.getLogger(HormaBean.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                listaRespuesta.add(false);
                listaRespuesta.add("Error al crear Nueva Horma!");
                ex.printStackTrace();
                Logger.getLogger(HormaBean.class.getName()).log(Level.SEVERE, null, ex);
            }
         }
         else
         {
             listaRespuesta.add(false);
             listaRespuesta.add("Horma que desea crear ya existe!");
             return listaRespuesta;
         }
         return listaRespuesta;

    }
    public List<Horma> consultarHorma()
    {   
        return this.hormaController.findHormaOrderByAll();
//        List<Horma>listaHorma=new ArrayList<Horma>();
//
//        GestorBaseDatos gbd=new GestorBaseDatos();
//        this.setearConexion(gbd);
//        String query="select * from horma";       
//        
//        List<List>lista=gbd.selectVarios(query);
//        for(int j=0;j<lista.size();j++)
//        {
//            listaHorma.add(new Horma(((lista.get(j)).get(0)).toString(), ((lista.get(j)).get(1)).toString(), ((lista.get(j)).get(2)).toString(), ((lista.get(j)).get(3)).toString(), ((lista.get(j)).get(4)).toString()));               
//        }           
//       
//       System.out.println("Horma query es"+query); 
//                
//        listaRetorno.add(listaHorma);
//
//        System.out.println("Clase Homra el valor es"+query+" ");
//        System.out.println("listaHorma "+listaHorma.size()+ " listaRetorno "+listaRetorno.size());
//        return listaRetorno;
    }
    public List<Object> modificarDatosHorma()
    {
        List listaRespuesta=new ArrayList<Object>();
        String respuesta="";
         String condicion=" where o.nombrehorma= '"+this.getHorma().getNombrehorma()+"' and o.tamanio= '"+this.getHorma().getTamanio()+"'";
         List <Horma> lHorma=this.hormaController.findHormaWhere(condicion);
         boolean bandera=false;
         if((lHorma.size()==1)&&((lHorma.get(0).getCodhorma().equals(this.getHorma().getCodhorma()))))
         {
             bandera=true;
         }
         else if(lHorma.isEmpty())
         {
             bandera=true;
         }
         else if(!lHorma.isEmpty())
         {
             respuesta="Error: El tamaño de Horma a modificar, ya existe en: "+lHorma.get(0).getCodhorma();
             listaRespuesta.add(false);
             listaRespuesta.add(respuesta);
         }
         
         if(bandera)
         {             
            try {                                    
                this.hormaController.edit(this.getHorma());
                listaRespuesta.add(true);
                listaRespuesta.add("Horma actualizada!");
                return listaRespuesta;
            } catch (NonexistentEntityException ex) {
                listaRespuesta.add(false);
                listaRespuesta.add("Horma que desea actualizar no existe!");
                ex.printStackTrace();
                Logger.getLogger(HormaBean.class.getName()).log(Level.SEVERE, null, ex);
            } catch (RollbackFailureException ex) {
                listaRespuesta.add(false);
                listaRespuesta.add("Error al actualizar Horma! "+ex);
                ex.printStackTrace();
                Logger.getLogger(HormaBean.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                listaRespuesta.add(false);
                listaRespuesta.add("Error al actualizar Nueva Horma! "+ex);
                ex.printStackTrace();
                Logger.getLogger(HormaBean.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
         
         return listaRespuesta;
        
    }
    public List<Object> eliminarHorma(String codHorma)
    {     
        List listaRespuesta=new ArrayList<Object>();
        
        try {                                    
                this.hormaController.destroy(codHorma);
                listaRespuesta.add(true);
                listaRespuesta.add("Horma "+codHorma+" eliminada!");
                return listaRespuesta;
            } catch (NonexistentEntityException ex) {
                listaRespuesta.add(false);
                listaRespuesta.add("Horma "+codHorma+", que desea eliminar no existe!");
                ex.printStackTrace();
                Logger.getLogger(HormaBean.class.getName()).log(Level.SEVERE, null, ex);        
            } catch (Exception ex) {
                listaRespuesta.add(false);
                listaRespuesta.add("Error al eliminar Horma "+codHorma+"! "+ex);
                ex.printStackTrace();
                Logger.getLogger(HormaBean.class.getName()).log(Level.SEVERE, null, ex);
            }
        return listaRespuesta;
//        if(this.verificarLogin())
//        {
//            int enSistema=-1;
//            GestorBaseDatos gbd=new GestorBaseDatos();
//            this.setearConexion(gbd);
//            //verificar que la horma a eliminar no este asociada con algun modelo de calzado
//            enSistema=Integer.parseInt((gbd.select("select count(codEstructuraMateria) from ModeloCalzado where  Horma_fk= \'"+codHorma+"\'")).get(0).toString()); 
//            if(enSistema==0)            
//            {
//               if(gbd.delete("Horma","codHorma", "\'"+codHorma+"\'",true)) return true;               
//            }
//            else
//            {
//                this.mostrarMensaje("error","Error: La Horma que desea eliminar está asociada con uno o varios Modelos de Calzado.","");
//            }
//        }
//        return false;
    }
}
